function [PH,ax]=IrfPlot_Unit(IRF,LineStyleList,SymmetryFlag,ax,YMAXSCALE)

%% Preliminary Setup
IRF                 =   IRF(:);
Num_T               =   length(IRF);

if nargin<2 || isempty(LineStyleList)
    LineStyleList   =   {'-','blue',3};
end
if nargin<3 || isempty(SymmetryFlag)
    SymmetryFlag    =   1;
end
if nargin<4 || isempty(ax)
    ax              =   gca;
    YLim_0          =   [0,0];
    
else
    hold on;
    YLim_0          =   ax.YLim;
end
if nargin<5 || isempty(YMAXSCALE)
    YMAXSCALE       =   0;
end
%% YAxis
% Actual Limits
YMax                =   max(IRF(:)); YMax   =   max(YMax,YLim_0(2));
YMin                =   min(IRF(:)); YMin   =   min(YMin,YLim_0(1));
YAbsMax             =   max(abs([YMax;YMin]));
YAbsMax             =   max(YMAXSCALE,YAbsMax);
if YAbsMax<eps
    YMax            =   1e-2;
    YAbsMax         =   1e-2;
end
% Y-Axis Interval
NumInterval         =   3;
RoundUnit           =   0.5;


YExpNum             =   floor(log(YAbsMax)/log(10));
YY_2digit           =   YAbsMax/(10^YExpNum);
YInterval           =   ceil(YY_2digit/NumInterval/RoundUnit)*...
                        RoundUnit*(10^YExpNum);
YAbsMax             =   YInterval*NumInterval;

% Strech the Limit by its Magintude and Grid Interval
switch SymmetryFlag
    case 0
        if YMin>0
            YMax        =   YAbsMax;
            YMin        =   0;
            YTicksVec   =   (0:YInterval:YAbsMax)';
        elseif YMax>0
            YMax        =   ceil(YMax/YInterval)*YInterval;
            YMin        =   floor(YMin/YInterval)*YInterval;
            YTicksVec   =   [(YMin:YInterval:0)';...
                             (YInterval:YInterval:YMax)'];
        else
            YMax        =   0;
            YMin        =   floor(YMin/YInterval)*YInterval;
            YTicksVec   =   (YMin:YInterval:0)';
        end
    case 1
        YMax        =   YAbsMax;
        YMin        =   -YAbsMax;
        YTicksVec   =   [(YMin:YInterval:0)';(YInterval:YInterval:YMax)'];
end

%% XAxis
% X-Axis Interval
NumInterval         =   6;
RoundUnit           =   4;
XInterval           =   ceil(Num_T/NumInterval/RoundUnit)*RoundUnit;
XGrid               =   (0:1:Num_T-1)';
XTicksVec           =   (0:XInterval:ceil((Num_T-1)/XInterval)*XInterval)';
XTicksVec           =   XTicksVec(XTicksVec<=Num_T);

%% Generate the Graph
StyleDim            =   length(LineStyleList);

switch StyleDim
    case 0
        StyleList       =   {'-','blue',3};
    case 1
        StyleList       =   {LineStyleList{1},'blue',3};
    case 2
        StyleList       =   {LineStyleList{1},LineStyleList{2},3};
    case 3
        StyleList       =   {LineStyleList{1},LineStyleList{2},LineStyleList{3}};
    otherwise
        error('LineStyleList input has wrong dimensions');
end

PH                  =   plot(ax,XGrid,IRF,...
                                'Linestyle',StyleList{1},...
                                'Color',StyleList{2},...
                                'Linewidth',StyleList{3});
hold on;
plot(ax,XGrid,zeros(1,Num_T),'k-','linewidth',0.3);
hold off;

% Setup Limits and Ticks
ax.YLim                 =   [YMin,YMax];
ax.YTick                =   YTicksVec;
ax.XTick                =   XTicksVec;
ax.YAxis.Exponent       =   YExpNum;
ax.YAxis.TickLabelFormat=   '%.1g';
ax.YAxis.FontSize       =   14;
ax.XAxis.FontSize       =   14;
ax.XGrid                =   'on';
ax.YGrid                =   'on';
ax.Box                  =   'off';